#include"comm.hpp"

string TransToHex(key_t k)
{
    char buffer[32];
    snprintf(buffer,sizeof buffer,"0x%x",k);
    return buffer;
}


int main()
{
    //1.创建公共的key值
    key_t k=ftok(PATH_NAME,PROJ_ID);
    assert(k!=-1);
    Log("create lkey done",Debug)<<"Server key : "<< TransToHex(k) << endl;

    //2.创建共享内存--一个全新的共享内存2---通信的发起者
    int shmid = shmget(k,SHM_SIZE,IPC_CREAT | IPC_EXCL | 0666); 
    if(shmid==-1)
    {
        perror("shmget");
        exit(1);
    }
    Log("create shm done",Debug)<<"shmid : "<< shmid << endl;

    sleep(10); 

    //3.将指定的共享内存，挂接到自己的地址空间
    char* shmaddr=(char*)shmat(shmid,nullptr,0);
    Log("attach shm done",Debug)<<"shmid : "<< shmid << endl;
    
    sleep(10);

    //这里就是通信逻辑

    //4.将指定的共享内存从自己的地址空间中去关联
    int n=shmdt(shmaddr);
    assert(n!=-1);
    (void)n;
    Log("Detach shm done",Debug)<<"shmid : "<< shmid << endl;

    sleep(10);


    //删除共享内存
     n=shmctl(shmid,IPC_RMID,nullptr);
    assert(n!=-1);
    (void)n;
    Log("Delete shmid done",Debug)<<"shmid : "<< shmid << endl;

    return 0;
}